#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
using std::cout;
using std::cerr;
using std::endl;
using std::string;
using std::ifstream;
using std::istringstream;

//习惯：当函数参数为对象时，首先考虑const引用的形式作为形参
//引用的意义在于避免实参初始化形参时发生复制
//const的意义在于避免函数体中通过引用修改实参，
//以及为了绑定右值属性的对象
void readConfig(const string & filename){
    ifstream ifs(filename);
    if(!ifs){
        cerr << "ifstream open file failed" << endl;
        return;
    }

    string line;
    string key, value;
    while(std::getline(ifs,line)){
        //字符串输入流相当于缓冲区，缓存了一行的内容
        //之后可以对这一行的内容进行解析
        istringstream iss(line);
        //这里利用了输入流运算符默认以空格为分隔符的效果
        iss >> key >> value;
        cout << key << " -------> " << value << endl;
    }
}

void test0(){
    //编译器会用C风格的字符串创建出一个
    //匿名的string对象，作为实参
    readConfig("myserver.conf");

    /* string word("hello"); */
    /* printf("%s\n",word.c_str()); */
}

int main(void){
    test0();
    return 0;
}
